package com.wc.alorithm_luogu._思维.P1012;

import java.util.*;

/**
 * @Author congge
 * @Date 2023/5/13 19:06
 * @description https://www.luogu.com.cn/problem/P1012
 * [NOIP1998 提高组] 拼数
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        // 存放每一个首位数字的桶子
        ArrayList<LinkedList<Integer>> nums = new ArrayList<>(10);

        for (int i = 0; i < 10; i++) {
            nums.add(new LinkedList<>());
        }

        LinkedList<Integer> bucket = new LinkedList<>();

        // 存放当前输入的数字
        int curNum;
        // 当前输入数字的长度
        int curNumLen;
        // 当前输入数字的首位数字
        int curNumFirst;

        int[] bits = new int[10];
        for (int i = 1, bit = 1; i < bits.length; i++, bit *= 10) {
            bits[i] = bit;
        }
        // 带比较数字
        int compareNum;

        // 待比较的数字长度
        int compareNumLen;

        while (n-- > 0) {
            curNum = sc.nextInt();
            curNumLen = Integer.toString(curNum).length();
            curNumFirst = curNum / bits[curNumLen];
            // 取出首位数字的桶子
            bucket = nums.get(curNumFirst);

            int size = bucket.size();

            for (int i = 0; i < size; i++) {
                int changeNum = curNum;
                int changeLen = curNumLen;
                compareNum = bucket.get(i);
                compareNumLen = Integer.toString(compareNum).length();

                // 比较哪一个放在最前面最好
                // 例如 3 34 应该34 放在前面
                //     3 32 应该3 放在前面
                //     3 334 应该334 放在前面
                //     3 332 应该3 放在前面
                // 那么如何判断谁放到前面呢
                // 就要能想到 3 变成33或者是333 的操作
                // 那要是不是1位数对多位数嗯
                // 35 355
                // 这个操作就是要补首位就好了
                if (changeLen != compareNumLen) {
                    while (changeLen < compareNumLen) {
                        changeNum = changeNum * 10 + curNumFirst;
                        changeLen++;
                    }

                    while (compareNumLen < changeLen) {
                        compareNum = compareNum * 10 + curNumFirst;
                        compareNumLen++;
                    }
                }

                // 比较插入
                if (compareNum < changeNum) {
                    bucket.add(i, curNum);
                    break;
                }
            }
            if (size == bucket.size()) {
                bucket.add(curNum);
            }
        }

        StringBuilder ans = new StringBuilder();

        for (int i = 9; i >= 1; i--) {
            bucket = nums.get(i);
            for(int num:bucket){
                ans.append(num);
            }
        }
        System.out.println(ans);
    }
}
